I’m trying to organize my preparing research for publication, as well as explore the timeline capabilities of R. I have prepared the Table of Contents from Wendy Laura Belcher’s “Writing Your Journal Article in 12 Weeks” workbook as a .csv file, previously built via Microsoft Excel. Using a data frame format I found while looking for help with Gantt charts in R, the dataframe can be seen here:
df<-read.csv("Table of Contents.csv")
data.frame(df)
Each of the 12 weeks (with an additional intro week and wrap-up week) has several instructional topics and exercises to perform. The Gantt chart would ideally show a timeline with these items clearly visible, preferably displayed by week. The language I was able to uncover and use to a mild degree of success was this:
library(DiagrammeR)
m<-mermaid(
paste0(
# mermaid "header", each component separated with "\n" (line break)
"gantt", "\n",
"dateFormat YYYY-MM-DD", "\n",
"title Journal Article Gantt Diagram", "\n",
# unite the first two columns (task & status) and separate them with ":"
# then, unite the other columns and separate them with ","
# this will create the required mermaid "body"
paste(df %>%
unite(i, task, status, sep = " : ") %>%
unite(j, i, pos, start, end, sep = ", ") %>%
.$j,
collapse = "\n"
), "\n"
)
)
m$x$config = list(ganttConfig = list(
axisFormatter = list(list(
"%b %Y"
,htmlwidgets::JS(
'function(d){ return d.getDay() == 1 }'
)
))
))
and evenutally, after tweaking my task list to not contain colons or semi-colons and rooting through mistakes in the schedule labelling, I was able to force this out:
m
While all the tasks are there, this version of a Gantt chart is not ideal, in that it is not obvious how to format the chart to be better viewed. A closer look at this format may result in a more usable image.
Another timeline package I came across was “timevis”. I manipulated the .csv a bit, inputting actual dates instead of the “after” nomenclature for the Gantt coding. The result is something a bit more polished, being able to zoom in on the task much more easily, and having the timeline in a more landscape feel rather than the overwhelming profile given in the Gantt.
library(timevis)
data <- data.frame(
content = df$task,
start = df$start,
end = df$end
)
Resulting in:
timevis(data)
Some features I would like to add to this timeline is to color code the tasks by topic and status and to have the information for the task be available when moused over.
Another R timeline package is “plotly”.
library(plotly)
df$Start <- as.Date(df$start, format = "%m/%d/%Y")
client <- "Sample Client"
cols <- RColorBrewer::brewer.pal(length(unique(df$client)), name = "Set3")
df$color <- factor(df$client, labels = cols)
Obviously, there is more work and formatting to be done, but at least I now know that it’s possible to code a Gantt chart in R, and there are several packages that can help me get the style I want. I would like to pursue this further, as I think it ultimately can help me organize my research and task management into visual aids that can help keep me on task.
In addition, I’ve always been daunted by Gantt carts, partly because they are not straight forward to make in Microsoft Excel, and because most of the online help to make them involve paying a fee or buying software, which I try to avoid. I really don’t want to pay for a software that I may or may not like/use frequently enough to justify the purchase. But my brief foray into the R help forums was enough to give me 3 viable options in R, and I was able to get the code to work well enough with not too much headache. It’s not perfect, obviously, but it’s allowed me to practice making my own GitHub repository without referring back to class instructions, working out the kinks of committing and pushing to the github site, and making sure my website is updating correctly and fixing the nuances that keep cropping up.
I still don’t know much R programming vocabulary, but I can stumble around enough to have a vague idea of what’s going on. And that is huge progress for me.
So, here’s a dancing pig.
LS0tDQp0aXRsZTogIldyaXRpbmcgWW91ciBKb3VybmFsIEFydGljbGUgaW4gMTIgV2Vla3MiDQpzdWJ0aXRsZTogQSBndWlkZSB0byBhY2FkZW1pYyBwdWJsaXNoaW5nIHN1Y2Nlc3MgYnkgV2VuZHkgTGF1cmEgQmVsY2hlcg0Kb3V0cHV0Og0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0DQotLS0NCg0KSSdtIHRyeWluZyB0byBvcmdhbml6ZSBteSBwcmVwYXJpbmcgcmVzZWFyY2ggZm9yIHB1YmxpY2F0aW9uLCBhcyB3ZWxsIGFzIGV4cGxvcmUgdGhlIHRpbWVsaW5lIGNhcGFiaWxpdGllcyBvZiBSLiBJIGhhdmUgcHJlcGFyZWQgdGhlIFRhYmxlIG9mIENvbnRlbnRzIGZyb20gV2VuZHkgTGF1cmEgQmVsY2hlcidzICJXcml0aW5nIFlvdXIgSm91cm5hbCBBcnRpY2xlIGluIDEyIFdlZWtzIiB3b3JrYm9vayBhcyBhIC5jc3YgZmlsZSwgcHJldmlvdXNseSBidWlsdCB2aWEgTWljcm9zb2Z0IEV4Y2VsLiBVc2luZyBhIGRhdGEgZnJhbWUgZm9ybWF0IEkgZm91bmQgd2hpbGUgbG9va2luZyBmb3IgaGVscCB3aXRoIEdhbnR0IGNoYXJ0cyBpbiBSLCB0aGUgZGF0YWZyYW1lIGNhbiBiZSBzZWVuIGhlcmU6DQoNCmBgYHtyfQ0KDQpkZjwtcmVhZC5jc3YoIlRhYmxlIG9mIENvbnRlbnRzLmNzdiIpDQpkYXRhLmZyYW1lKGRmKQ0KYGBgDQoNCkVhY2ggb2YgdGhlIDEyIHdlZWtzICh3aXRoIGFuIGFkZGl0aW9uYWwgaW50cm8gd2VlayBhbmQgd3JhcC11cCB3ZWVrKSBoYXMgc2V2ZXJhbCBpbnN0cnVjdGlvbmFsIHRvcGljcyBhbmQgZXhlcmNpc2VzIHRvIHBlcmZvcm0uIFRoZSBHYW50dCBjaGFydCB3b3VsZCBpZGVhbGx5IHNob3cgYSB0aW1lbGluZSB3aXRoIHRoZXNlIGl0ZW1zIGNsZWFybHkgdmlzaWJsZSwgcHJlZmVyYWJseSBkaXNwbGF5ZWQgYnkgd2Vlay4gVGhlIGxhbmd1YWdlIEkgd2FzIGFibGUgdG8gdW5jb3ZlciBhbmQgdXNlIHRvIGEgbWlsZCBkZWdyZWUgb2Ygc3VjY2VzcyB3YXMgdGhpczoNCg0KYGBge3J9DQpsaWJyYXJ5KERpYWdyYW1tZVIpDQptPC1tZXJtYWlkKA0KICBwYXN0ZTAoDQogICAgIyBtZXJtYWlkICJoZWFkZXIiLCBlYWNoIGNvbXBvbmVudCBzZXBhcmF0ZWQgd2l0aCAiXG4iIChsaW5lIGJyZWFrKQ0KICAgICJnYW50dCIsICJcbiIsIA0KICAgICJkYXRlRm9ybWF0ICBZWVlZLU1NLUREIiwgIlxuIiwgDQogICAgInRpdGxlIEpvdXJuYWwgQXJ0aWNsZSBHYW50dCBEaWFncmFtIiwgIlxuIiwNCiAgICAjIHVuaXRlIHRoZSBmaXJzdCB0d28gY29sdW1ucyAodGFzayAmIHN0YXR1cykgYW5kIHNlcGFyYXRlIHRoZW0gd2l0aCAiOiINCiAgICAjIHRoZW4sIHVuaXRlIHRoZSBvdGhlciBjb2x1bW5zIGFuZCBzZXBhcmF0ZSB0aGVtIHdpdGggIiwiDQogICAgIyB0aGlzIHdpbGwgY3JlYXRlIHRoZSByZXF1aXJlZCBtZXJtYWlkICJib2R5Ig0KICAgIHBhc3RlKGRmICU+JQ0KICAgICAgICAgICAgdW5pdGUoaSwgdGFzaywgc3RhdHVzLCBzZXAgPSAiIDogIikgJT4lDQogICAgICAgICAgICB1bml0ZShqLCBpLCBwb3MsIHN0YXJ0LCBlbmQsIHNlcCA9ICIsICIpICU+JQ0KICAgICAgICAgICAgLiRqLCANCiAgICAgICAgICBjb2xsYXBzZSA9ICJcbiINCiAgICApLCAiXG4iDQogICkNCikNCg0KbSR4JGNvbmZpZyA9IGxpc3QoZ2FudHRDb25maWcgPSBsaXN0KA0KICBheGlzRm9ybWF0dGVyID0gbGlzdChsaXN0KA0KICAgICIlYiAgJVkiDQogICAgLGh0bWx3aWRnZXRzOjpKUygNCiAgICAgICdmdW5jdGlvbihkKXsgcmV0dXJuIGQuZ2V0RGF5KCkgPT0gMSB9Jw0KICAgICkNCiAgKSkNCikpDQpgYGANCmFuZCBldmVudXRhbGx5LCBhZnRlciB0d2Vha2luZyBteSB0YXNrIGxpc3QgdG8gbm90IGNvbnRhaW4gY29sb25zIG9yIHNlbWktY29sb25zIGFuZCByb290aW5nIHRocm91Z2ggbWlzdGFrZXMgaW4gdGhlIHNjaGVkdWxlIGxhYmVsbGluZywgSSB3YXMgYWJsZSB0byBmb3JjZSB0aGlzIG91dDoNCg0KYGBge3J9DQptDQpgYGANCldoaWxlIGFsbCB0aGUgdGFza3MgYXJlIHRoZXJlLCB0aGlzIHZlcnNpb24gb2YgYSBHYW50dCBjaGFydCBpcyBub3QgaWRlYWwsIGluIHRoYXQgaXQgaXMgbm90IG9idmlvdXMgaG93IHRvIGZvcm1hdCB0aGUgY2hhcnQgdG8gYmUgYmV0dGVyIHZpZXdlZC4gQSBjbG9zZXIgbG9vayBhdCB0aGlzIGZvcm1hdCBtYXkgcmVzdWx0IGluIGEgbW9yZSB1c2FibGUgaW1hZ2UuDQoNCkFub3RoZXIgdGltZWxpbmUgcGFja2FnZSBJIGNhbWUgYWNyb3NzIHdhcyAidGltZXZpcyIuIEkgbWFuaXB1bGF0ZWQgdGhlIC5jc3YgYSBiaXQsIGlucHV0dGluZyBhY3R1YWwgZGF0ZXMgaW5zdGVhZCBvZiB0aGUgImFmdGVyIiBub21lbmNsYXR1cmUgZm9yIHRoZSBHYW50dCBjb2RpbmcuIFRoZSByZXN1bHQgaXMgc29tZXRoaW5nIGEgYml0IG1vcmUgcG9saXNoZWQsIGJlaW5nIGFibGUgdG8gem9vbSBpbiBvbiB0aGUgdGFzayBtdWNoIG1vcmUgZWFzaWx5LCBhbmQgaGF2aW5nIHRoZSB0aW1lbGluZSBpbiBhIG1vcmUgbGFuZHNjYXBlIGZlZWwgcmF0aGVyIHRoYW4gdGhlIG92ZXJ3aGVsbWluZyBwcm9maWxlIGdpdmVuIGluIHRoZSBHYW50dC4NCg0KYGBge3J9DQpsaWJyYXJ5KHRpbWV2aXMpDQoNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgY29udGVudCA9IGRmJHRhc2ssDQogIHN0YXJ0ICAgPSBkZiRzdGFydCwNCiAgZW5kICAgICA9IGRmJGVuZA0KKQ0KYGBgDQpSZXN1bHRpbmcgaW46DQpgYGB7cn0NCnRpbWV2aXMoZGF0YSkNCmBgYA0KU29tZSBmZWF0dXJlcyBJIHdvdWxkIGxpa2UgdG8gYWRkIHRvIHRoaXMgdGltZWxpbmUgaXMgdG8gY29sb3IgY29kZSB0aGUgdGFza3MgYnkgdG9waWMgYW5kIHN0YXR1cyBhbmQgdG8gaGF2ZSB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0YXNrIGJlIGF2YWlsYWJsZSB3aGVuIG1vdXNlZCBvdmVyLg0KDQpBbm90aGVyIFIgdGltZWxpbmUgcGFja2FnZSBpcyAicGxvdGx5Ii4NCg0KYGBge3J9DQpsaWJyYXJ5KHBsb3RseSkNCg0KZGYkU3RhcnQgIDwtIGFzLkRhdGUoZGYkc3RhcnQsIGZvcm1hdCA9ICIlbS8lZC8lWSIpDQpjbGllbnQgICAgPC0gIlNhbXBsZSBDbGllbnQiDQpjb2xzICAgICAgPC0gUkNvbG9yQnJld2VyOjpicmV3ZXIucGFsKGxlbmd0aCh1bmlxdWUoZGYkY2xpZW50KSksIG5hbWUgPSAiU2V0MyIpDQpkZiRjb2xvciAgPC0gZmFjdG9yKGRmJGNsaWVudCwgbGFiZWxzID0gY29scykNCmBgYA0KDQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRSxlcnJvcj1GQUxTRX0NCnAgPC0gcGxvdF9seSgpDQpmb3IoaSBpbiAxOihucm93KGRmKSAtIDEpKXsNCiAgcCA8LSBhZGRfdHJhY2UocCwNCiAgICAgICAgICAgICAgICAgeCA9IGMoZGYkU3RhcnRbaV0sIGRmJFN0YXJ0W2ldK2RmJGR1cmF0aW9uW2ldKSwgICAgICAgICAgICAgICAgICB5ID0gYyhpLCBpKSwgDQogICAgICAgICAgICAgICAgIG1vZGUgPSAibGluZXMiLA0KICAgICAgICAgICAgICAgICBsaW5lID0gbGlzdChjb2xvciA9IGRmJGNvbG9yW2ldLCB3aWR0aCA9IDIwKSwNCiAgICAgICAgICAgICAgICAgc2hvd2xlZ2VuZCA9IEYsDQogICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICJ0ZXh0IiwNCiAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlKCJUYXNrOiAiLCBkZiR0YXNrW2ldLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXR1czogIiwgZGYkc3RhdHVzW2ldKSwNCiAgICAgICAgICAgICAgICAgZXZhbHVhdGUgPSBUDQogICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgfQ0KDQpwDQpgYGANCk9idmlvdXNseSwgdGhlcmUgaXMgbW9yZSB3b3JrIGFuZCBmb3JtYXR0aW5nIHRvIGJlIGRvbmUsIGJ1dCBhdCBsZWFzdCBJIG5vdyBrbm93IHRoYXQgaXQncyBwb3NzaWJsZSB0byBjb2RlIGEgR2FudHQgY2hhcnQgaW4gUiwgYW5kIHRoZXJlIGFyZSBzZXZlcmFsIHBhY2thZ2VzIHRoYXQgY2FuIGhlbHAgbWUgZ2V0IHRoZSBzdHlsZSBJIHdhbnQuIEkgd291bGQgbGlrZSB0byBwdXJzdWUgdGhpcyBmdXJ0aGVyLCBhcyBJIHRoaW5rIGl0IHVsdGltYXRlbHkgY2FuIGhlbHAgbWUgb3JnYW5pemUgbXkgcmVzZWFyY2ggYW5kIHRhc2sgbWFuYWdlbWVudCBpbnRvIHZpc3VhbCBhaWRzIHRoYXQgY2FuIGhlbHAga2VlcCBtZSBvbiB0YXNrLg0KDQpJbiBhZGRpdGlvbiwgSSd2ZSBhbHdheXMgYmVlbiBkYXVudGVkIGJ5IEdhbnR0IGNhcnRzLCBwYXJ0bHkgYmVjYXVzZSB0aGV5IGFyZSBub3Qgc3RyYWlnaHQgZm9yd2FyZCB0byBtYWtlIGluIE1pY3Jvc29mdCBFeGNlbCwgYW5kIGJlY2F1c2UgbW9zdCBvZiB0aGUgb25saW5lIGhlbHAgdG8gbWFrZSB0aGVtIGludm9sdmUgcGF5aW5nIGEgZmVlIG9yIGJ1eWluZyBzb2Z0d2FyZSwgd2hpY2ggSSB0cnkgdG8gYXZvaWQuIEkgcmVhbGx5IGRvbid0IHdhbnQgdG8gcGF5IGZvciBhIHNvZnR3YXJlIHRoYXQgSSBtYXkgb3IgbWF5IG5vdCBsaWtlL3VzZSBmcmVxdWVudGx5IGVub3VnaCB0byBqdXN0aWZ5IHRoZSBwdXJjaGFzZS4gIEJ1dCBteSBicmllZiBmb3JheSBpbnRvIHRoZSBSIGhlbHAgZm9ydW1zIHdhcyBlbm91Z2ggdG8gZ2l2ZSBtZSAzIHZpYWJsZSBvcHRpb25zIGluIFIsIGFuZCBJIHdhcyBhYmxlIHRvIGdldCB0aGUgY29kZSB0byB3b3JrIHdlbGwgZW5vdWdoIHdpdGggbm90IHRvbyBtdWNoIGhlYWRhY2hlLiAgSXQncyBub3QgcGVyZmVjdCwgb2J2aW91c2x5LCBidXQgaXQncyBhbGxvd2VkIG1lIHRvIHByYWN0aWNlIG1ha2luZyBteSBvd24gR2l0SHViIHJlcG9zaXRvcnkgd2l0aG91dCByZWZlcnJpbmcgYmFjayB0byBjbGFzcyBpbnN0cnVjdGlvbnMsIHdvcmtpbmcgb3V0IHRoZSBraW5rcyBvZiBjb21taXR0aW5nIGFuZCBwdXNoaW5nIHRvIHRoZSBnaXRodWIgc2l0ZSwgYW5kIG1ha2luZyBzdXJlIG15IHdlYnNpdGUgaXMgdXBkYXRpbmcgY29ycmVjdGx5IGFuZCBmaXhpbmcgdGhlIG51YW5jZXMgdGhhdCBrZWVwIGNyb3BwaW5nIHVwLg0KDQpJIHN0aWxsIGRvbid0IGtub3cgbXVjaCBSIHByb2dyYW1taW5nIHZvY2FidWxhcnksIGJ1dCBJIGNhbiBzdHVtYmxlIGFyb3VuZCBlbm91Z2ggdG8gaGF2ZSBhIHZhZ3VlIGlkZWEgb2Ygd2hhdCdzIGdvaW5nIG9uLiBBbmQgdGhhdCBpcyBodWdlIHByb2dyZXNzIGZvciBtZS4NCg0KU28sIGhlcmUncyBhIGRhbmNpbmcgcGlnLg0KDQohW10oaHR0cHM6Ly9pLmltZ3VyLmNvbS9xVHpZb0F3LmdpZikNCg==